home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
001-100
/
001-025
/
024
/
conquest
/
conqve.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-17
|
17KB
|
368 lines
#include <stdio.h>
#include "defs.h"
#include "structs.h"
#include "vars.h"
inv_enemy(x,y, planet)
struct stplanet *planet;
{
int num,inv_amount,balance,min_mb,transports,new_tf;
int trash1, trash2;
balance = planet->iu;
if ( tf_stars[planet->pstar][ENEMY]==0 ) {
get_tf(ENEMY,&new_tf,planet->pstar);
tf_stars[planet->pstar][ENEMY]=1;
}
else { /*use present tf*/
new_tf = 1;
while ( (tf[ENEMY][new_tf].dest != planet->pstar) || (tf[
ENEMY][new_tf].eta != 0) ) new_tf = new_tf + 1;
};
min_mb = planet->capacity / 20;
while ( ((planet->amb==0) && (! planet->conquered) &&
(planet->mb < min_mb) && (balance >= mb_cost))) {
balance = balance - mb_cost;
planet->mb = planet->mb+1;
};
if ( ( balance >= b_cost) && (rnd(5) != 1) && (rnd(07) <= planet->amb+3)
&&
(planet->amb > 1) ) {
balance = balance - b_cost;
tf[ENEMY][new_tf].b ++;
};
if ( (balance >= amb_cost) && ((planet->amb< 4) || (rnd(2)==2))
&& (! planet->conquered) ) {
balance = balance - amb_cost;
planet->amb++;
};
while ( balance >= 9 ) {
switch ( rnd(12) ){
case 1:
case 2:
research(ENEMY,en_research,8);
balance = balance-8;
break;
default:
inv_amount = min(3,planet->inhabitants*iu_ratio - planet->iu);
balance = balance - i_cost * inv_amount;
planet->iu = planet->iu + inv_amount;
break;
case 3:
case 4:
case 10:
if ( balance >= c_cost ) {
balance = balance - c_cost;
tf[ENEMY][new_tf].c++;
}
else if ( (! planet->conquered) && (balance >= mb_cost)
) {
balance = balance - mb_cost;
planet->mb = planet->mb + 1;
}
else {
balance = balance - 9;
research(ENEMY,en_research,9);
};
break;
case 11:
case 12:
if ( ((float)planet->inhabitants/planet->capacity < 0.6) ||
((planet->capacity >= b_cost / iu_ratio) && (planet->iu <
b_cost+10)) ) { /*no t"s*/
inv_amount = min(3,planet->inhabitants * iu_ratio - planet->iu);
balance = balance - inv_amount * i_cost;
planet->iu = planet->iu + inv_amount;
}
else /*build transports*/
if(!(planet->conquered)) {
transports = min(rnd(2)+6,planet->inhabitants-1);
if ( planet->iu > b_cost )
transports = min(transports,planet->iu - b_cost);
balance = balance - transports;
planet->inhabitants = planet->inhabitants - transports;
trash1 = planet->iu - transports;
trash2 = planet->inhabitants * iu_ratio;
planet->iu = min(trash1, trash2);
tf[ENEMY][new_tf].t = tf[ENEMY][new_tf].t + transports;
};
break;
/*
balance = balance - s_cost;
tf[ENEMY][new_tf].s = tf[ENEMY][new_tf].s + 1;
if ( debug ) write(tty, "s ");
*/
}; /*switch (*/
}; /*while (*/
zero_tf(ENEMY,new_tf);
research(ENEMY,en_research,balance);
}
inv_player(x,y,planet)
struct stplanet *planet;
{
boolean printtf;
char iline[81];
char key;
int cost,amount,ind,new_tf,balance;
int trash1, trash2;
get_tf(player,&new_tf,planet->pstar);
tf_stars[planet->pstar][player]++;
printtf = false;
balance=planet->iu;
cle3r_left();
point(1,19);
putchar(planet->pstar+'A'-1);
printf("%d:%2d ", planet->number, planet->psee_capacity);
point(x_cursor + 5, y_cursor);
x_cursor = x_cursor - 5;
printf("(%2d,/%3d)", planet->inhabitants, planet->iu);
if ( planet->conquered )
printf("Con");
else
printf(" ");
if ( planet->mb!=0 )
printf("%2dmb", planet->mb);
else
printf(" ");
if ( planet->amb!=0 )
printf("%2damb", planet->amb);
point(x_cursor,y_cursor + 1);
do {
point(1,18);
printf("%3d? ", balance);
point(5,18);
get_line(iline,&ind,false);
do {
get_token(iline,&ind,&amount,&key);
switch ( key ){
case 'A':
cost=amount*amb_cost;
if ( planet->inhabitants ==0 ) {
cost = 0;
error_message();
printf(" !abandoned planet");
}
else if (planet->conquered) {
cost =0;
error_message();
printf(" !No amb on conquered colony ");
}
else
if ( cost<=balance ) {
planet->amb=planet->amb+amount;
};
break;
case 'B':
cost=amount * b_cost;
if ( cost<=balance ) {
tf[player][new_tf].b=tf[player][new_tf].b
+ amount;
printtf = true;
};
break;
case 'C':
cost=amount * c_cost;
if ( cost <= balance ) {
tf[player][new_tf].c=tf[player][new_tf].c
+ amount;
printtf = true;
};
break;
case 'H':
help(4);
cost = 0;
break;
case 'M':
cost=amount * mb_cost;
if ( planet->inhabitants ==0 ) {
cost =0;
error_message();
printf(" !abandoned planet");
}
else if (planet->conquered) {
cost =0;
error_message();
printf(" !No Mb on conquered colony ");
}
else
if ( cost <= balance ) {
planet->mb=planet->mb+amount;
};
break;
case 'S':
cost= amount * s_cost;
if ( cost <= balance ) {
tf[player][new_tf].s=tf[player][new_tf].s
+ amount;
printtf = true;
};
break;
case 'T':
cost= amount;
if ( cost <= balance ) {
if ( cost > planet->inhabitants ) {
error_message();
printf(" ! Not enough people for ( trans");
cost=0;
}
else if ( planet->conquered ) {
cost = 0;
error_message();
printf( "!No transports on conqered col");
}
else {
tf[player][new_tf].t=tf[player][new_tf].t+amount;
planet->inhabitants=planet->inhabitants-amount;
trash1 = planet->iu - amount;
trash2 = planet->inhabitants * iu_ratio;
planet->iu = min(trash1, trash2);
printtf = true;
if ( planet->inhabitants==0 ) {
col_stars[planet->pstar][player]--;
if ( col_stars[planet->pstar][player]==0 ) {
board[x][y].enemy = ' ';
update_board(x,y,left);
};
planet->team=none;
planet->amb=0;
planet->mb=0;
planet->iu=0;
};
};
};
break;
case 'I':
cost= i_cost * amount;
if ( (amount + planet->iu) > (planet->inhabitants*iu_ratio)
) {
cost = 0;
error_message();
printf(" !Can't support that many iu's");
}
else if ( cost <= balance ) {
planet->iu=planet->iu+amount;
};
break;
case 'R':
case 'V':
case 'W':
cost=amount;
if ( cost <= balance ) {
point(1,21);
research(player,key,amount);
};
pr2nt_res(key);
break;
case ' ':
cost=0;
break;
case '>':
cost=0;
point(1,18);
printf(">? ");
point(3,18);
get_char(&key);
switch ( key ){
case 'M':
printmap();
break;
case 'S':
starsum();
break;
case 'C':
print_col();
break;
case 'R':
ressum();
break;
default:
error_message();
printf(" !Only M,S,C,R allowed ");
}; /*switch ( > */
break;
default:
error_message();
printf(" !Illegal field %c",key);
}; /*switch (*/
if ( cost > balance ) {
error_message();
printf(" !can't affort %3d%c", amount, key);
}
else
balance = balance - cost;
}
while (key != ' ');
cle3r_left();
point(1,19);
putchar(planet->pstar+'A'-1);
printf("%d:%2d ", planet->number, planet->psee_capacity);
point(x_cursor + 5, y_cursor);
x_cursor = x_cursor - 5;
printf("(%2d,/%3d)", planet->inhabitants, planet->iu);
if ( planet->conquered )
printf("Con");
else
printf(" ");
if ( planet->mb!=0 )
printf("%2dmb", planet->mb);
else
printf(" ");
if ( planet->amb!=0 )
printf("%2damb", planet->amb);
point(x_cursor,y_cursor + 1);
if ( printtf ) {
point(1,20);
pr3nt_tf(new_tf);
};
}
while (balance > 0);
zero_tf(player,new_tf);
on_board(x,y);
}
invest()
{
int newborn,starnum;
struct stplanet *pplan;
production_year = 0;
point(33,20);
printf("* investment * ");
for ( starnum= 1 ; starnum<=nstars; starnum++ ) {
pplan= stars[starnum].first_planet;
while ( pplan!=nil ) {
if ( ((pplan->esee_team) == player)
&& ((pplan->capacity) > 10)
&& ((pplan->esee_def) < 12) )
pplan->esee_def = (pplan->esee_def) + 1;
if ( (pplan->team) != none ) {
newborn= round((pplan->inhabitants)
* growth_rate[pplan->team] *
(1-((pplan->inhabitants)/(pplan->capacity))));
if ( pplan->conquered )
newborn = newborn / 2;
pplan->inhabitants= (pplan->inhabitants)
+ newborn;
pplan->iu = ( pplan->iu) + newborn;
if ( pplan->team==ENEMY )
inv_enemy(stars[starnum].x,
stars[starnum].y,pplan);
else
inv_player(stars[starnum].x,
stars[starnum].y,pplan);
};
pplan=pplan->next;
};
};
battle();
}